\clearpage
\subsection{Norton Guide: простейшее однобайтное XOR-шифрование}
\label{norton_guide}

Norton Guide\footnote{\href{http://go.yurichev.com/17116}{wikipedia}} был популярен во времена MS-DOS, это была резидентная программа, работающая как
гипертекстовый справочник.

Базы данных Norton Guide это файлы с расширением .ng, содержимое которых выглядит как зашифрованное:

\begin{figure}[H]
\centering
\myincludegraphics{ff/XOR/ng/ng1.png}
\caption{Очень типичный вид}
\end{figure}

Почему мы думаем, что зашифрованное а не сжатое? 

Мы видим, как слишком часто попадается байт 0x1A (который выглядит как \q{$\rightarrow$}), в сжатом файле такого не было бы никогда.

Во-вторых, мы видим длинные части состоящие только из латинских букв, они выглядят как строки
на незнакомом языке.

\clearpage

Из-за того, что байт 0x1A слишком часто встречается, мы можем попробовать расшифровать файл, полагая
что он зашифрован простейшим XOR-шифрованием.

Применяем XOR с константой 0x1A к каждому байту в Hiew и мы можем видеть знакомые текстовые строки на английском:

\begin{figure}[H]
\centering
\myincludegraphics{ff/XOR/ng/ng2.png}
\caption{Hiew применение XOR с 0x1A}
\end{figure}

XOR-шифрование с одним константным байтом это самый простой способ шифрования, который, тем не менее, иногда
встречается.

Теперь понятно почему байт 0x1A так часто встречался: потому что в файле очень много нулевых байт 
и в зашифрованном виде они везде были заменены на 0x1A.

Но эта константа могла быть другой.

В таком случае, можно было бы попробовать перебрать все 256 комбинаций, и посмотреть содержимое \q{на глаз}, 
а 256 --- это совсем немного.

Больше о формате файлов Norton Guide: \url{http://go.yurichev.com/17317}.

\subsubsection{Энтропия}
\myindex{Wolfram Mathematica}
\myindex{Энтропия}

Очень важное свойство подобного примитивного шифрования в том, что информационная энтропия
зашифрованного/дешифрованного блока точно такая же.
Вот мой анализ в Wolfram Mathematica 10.

\begin{lstlisting}[caption=Wolfram Mathematica 10,style=custommath]
In[1]:= input = BinaryReadList["X86.NG"];

In[2]:= Entropy[2, input] // N
Out[2]= 5.62724

In[3]:= decrypted = Map[BitXor[#, 16^^1A] &, input];

In[4]:= Export["X86_decrypted.NG", decrypted, "Binary"];

In[5]:= Entropy[2, decrypted] // N
Out[5]= 5.62724

In[6]:= Entropy[2, ExampleData[{"Text", "ShakespearesSonnets"}]] // N
Out[6]= 4.42366
\end{lstlisting}

Что мы здесь делаем это загружаем файл, вычисляем его энтропию, дешифруем его, сохраняем, снова вычисляем энтропию (точно такая же!).

Mathematica дает возможность анализировать некоторые хорошо известные англоязычные тексты.

Так что мы вычисляем энтропию сонетов Шейкспира, и она близка к энтропии анализируемого нами файла.

Анализируемый нами файл состоит из предложений на английском языке, которые близки к языку
Шейкспира.

И применение побайтового XOR к тексту на английском языке не меняет энтропию.

% I checked!

Хотя, это не будет справедливо когда файл зашифрован при помощи XOR шаблоном длиннее одного байта.

Файл, который мы анализировали, можно скачать здесь: \url{http://go.yurichev.com/17350}.

\myparagraph{Еще кое-что о базе энтропии}

\newcommand{\FNENTURL}{\footnote{\url{http://www.fourmilab.ch/random/}}}

Wolfram Mathematica вычисляет энтропию с базой $e$ (основание натурального логарифма),
а утилита UNIX \IT{ent}\FNENTURL использует базу 2.

Так что мы явно указываем базу 2 в команде \TT{Entropy}, чтобы Mathematica давала те же результаты, что и утилита \IT{ent}.
